home *** CD-ROM | disk | FTP | other *** search
- // GETINFO SCRIPTING
- // Amazon.fr (image et donnΘes complΦtes ajoutΘes au donnΘes existantes)
-
- (***************************************************
- * Script d'importation pour : *
- * AMAZON FRANCE , http://www.amazon.fr *
- * *
- * Script by Willems Olivier based on the script *
- * 2003-12-25 : correction by antp *
- * *
- * A utiliser avec Ant Movie Catalog 3.4.0 *
- * www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com *
- * *
- * The source code of the script can be used in *
- * another program only if full credits to *
- * script author and a link to Ant Movie Catalog *
- * website are given in the About box or in *
- * the documentation of the program *
- ***************************************************)
-
- program AMAZON_FR;
-
- //ParamΦtres du script
- const
-
- // Mettre les valeurs α True pour importer les champs, ou False pour ne pas en tenir compte
- ConfirmTitre = True; // False : ne demande pas de confirmation du titre avant recherche
- TempsPause = 500; // 1000 = 1 Seconde (permet d'Θviter les timeout en cas de saturation serveur)
- ImportImage = True; // False : n'importe pas d'image
- ImportGrandeImage = True; // False : petite image importΘe
- ImportBonus = True; // False : n'importe pas les bonus dans la case Remarques
- ImportTitreOriginal = True; // False : n'importe pas le titre original
- ImportTitreTraduit = True; // False : n'importe pas le titre franτais
- ImportLangue = True; // False : n'importe pas les langues
- ImportSoustitre = True; // False : n'importe pas les soustitres
- ImportActeur = True; // False : n'importe pas les acteurs
- ImportRealisateur = True; // False : n'importe pas le rΘalisateur
- ImportProducteur = True; // False : n'importe pas le producteur
- ImportSynopsis = True; // False : n'importe pas le descriptif
- ImportZone = True; // False : n'importe pas la zone du DVD
- ImportDate = True; // False : n'importe pas la date de parution
- ImportGenre = True; // False : n'importe pas le premier genre
- ImportURL = True; // False ne place pas l'url du film
- ImportAddImport = False; // False : remplace le contenu des champs par les donnΘes importΘes
-
- var
- MovieName: string;
-
- function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
- var
- i: Integer;
- begin
- result := -1;
- if StartAt < 0 then
- StartAt := 0;
- for i := StartAt to List.Count-1 do
- if Pos(Pattern, List.GetString(i)) <> 0 then
- begin
- result := i;
- Break;
- end;
- end;
-
- procedure AnalyzePage(Address: string);
- var
- Page: TStringList;
- LineNr: Integer;
-
- begin
- Sleep(TempsPause); // Attente X seconde : Evite les timeout sur le serveur
- Page := TStringList.Create;
- Page.Text := GetPage(Address);
- if pos('Sur ce DVD', Page.Text) > 0 then
- begin
- AnalyzeMoviePage(Page);
- // Si on veut on prend l'adresse de la page
- if ImportURL then
- begin
- SetField(fieldURL, Address);
- end;
- end
- else
-
- if pos('satisfaisante pour votre recherche sur', Page.Text) > 0 then
- begin
- ShowMessage('Aucun Film TrouvΘ pour : ' + MovieName);
- end else
-
- if pos('Les articles les plus recherchés correspondant à', Page.Text) > 0 then
- begin
- PickTreeClear;
- LineNr := 0;
- LineNr := FindLine('résultats au total pour', Page, LineNr);
- if LineNr > -1 then
- begin
- //PickTreeAdd('Films TrouvΘs :', '');
- PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
- AddMoviesTitles(Page, LineNr);
- end;
- if PickTreeExec(Address) then
- AnalyzePage(Address);
- end else
-
- begin
- PickTreeClear;
- LineNr := 0;
- LineNr := FindLine('résultats au total pour', Page, LineNr);
- if LineNr > -1 then
- begin
- //PickTreeAdd('Films TrouvΘs :', '');
- PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
- AddMoviesTitles(Page, LineNr);
- end;
- if PickTreeExec(Address) then
- AnalyzePage(Address);
- end;
-
- Page.Free;
- end;
-
- procedure AnalyzeMoviePage(Page: TStringList);
- var
- Line, Value, Value2, FullValue: string;
- LineNr: Integer;
- BeginPos, EndPos: Integer;
- Dummy: string;
-
-
- begin
- // Zone
- if ImportZone then
- begin
- LineNr := FindLine('<BR>Zone : ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('<BR>Zone : ', Line)+11;
- line := copy(line,beginpos, length(line) - beginpos);
- EndPos := pos('<BR>', Line);
- Value := 'DVD ' + copy(Line, 1, EndPos-1);
- if ImportAddImport then
- begin
- GetField(fieldVideoFormat, Dummy);
- Value := Dummy + Value;
- SetField(fieldVideoFormat, Value);
- end
- else
- SetField(fieldVideoFormat, Value);
- end;
- end;
-
- // Genre
- if ImportGenre then
- begin
- LineNr := FindLine('Rechercher des DVD par sujet :', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr+2);
- EndPos := pos('">', Line);
- Value := copy(Line, 1, EndPos-1);
- if ImportAddImport then
- begin
- GetField(fieldCategory, Dummy);
- Value := Dummy + Value;
- SetField(fieldCategory, Value);
- end
- else
- SetField(fieldCategory, Value);
- end;
- end;
-
- // Date parution
- if ImportDate then
- begin
- LineNr := FindLine('Date de parution : ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('Date de parution : ', Line)+24;
- Line := copy(Line, Beginpos, Length(Line) - Beginpos);
- EndPos := pos('<br>', Line);
- Value := copy(Line, 1, EndPos-1);
- Value := copy (Value, Length(Value)-4,Length(Value)); // prend les 4 dernier
- // place l'annΘe
- SetField(fieldYear, Value);
- end;
- end;
-
- // Langue
- if ImportLangue then
- begin
- LineNr := FindLine('Langues et formats sonores : ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('Langues et formats sonores : ', Line)+29;
- line := copy(line,beginpos, length(line) - beginpos);
- EndPos := pos('<BR>', Line);
- Value := copy(Line, 1, EndPos-1);
- if ImportAddImport then
- begin
- GetField(fieldLanguages, Dummy);
- Value := Dummy + Value;
- SetField(fieldLanguages, Value);
- end
- else
- SetField(fieldLanguages, Value);
- end;
- end;
-
- // Soustitres
- if ImportSoustitre then
- begin
- LineNr := FindLine('Sous-titres : ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('Sous-titres : ', Line)+14;
- Line := copy(Line, Beginpos, length(line) - beginpos);
- EndPos := pos('<B', Line);
- Value := copy(Line, 1, EndPos-1);
- if ImportAddImport then
- begin
- GetField(fieldSubtitles, Dummy);
- Value := Dummy + Value;
- SetField(fieldSubtitles, Value);
- end
- else
- SetField(fieldSubtitles, Value);
- end;
- end;
-
- // Acteur
- if ImportActeur then
- begin
- Value := '';
- // on recherche la liste des acteurs
- LineNr := FindLine('<b>Avec :</b>', Page, 0);
- LineNr := LineNr -1; // astuce pour redΘmarrer de cette ligne
- // sans pour autant boucler α l'infini dans le while
- while LineNr > -1 do
- // si on a trouvΘ on boucle sur les lignes de la liste des acteurs
- begin
- // on cherche la clΘ
- LineNr := FindLine('field-actor=', Page, LineNr+1);
- if LineNr > -1 then
- begin
- // si on a trouvΘ
- Line := Page.GetString(LineNr);
- repeat
- //on boucle sur les acteurs de la ligne
- BeginPos := pos('field-actor=', Line);
- if BeginPos > 0 then
- begin
- BeginPos := BeginPos+12;
- // supprime le dΘbut de la ligne, rΘduit lla liste des acteurs
- Line := copy(Line,BeginPos, Length(Line) - BeginPos);
- EndPos := pos('/', Line);
- // reprend le nom de l'acteur et l'ajoute
- Value := Value + ', ' + copy(Line, 1, EndPos - 1);
- end;
- until BeginPos <= 0; // ne sort que s'il n'y a plus d'acteur dans la ligne
- end;
- end; // ne sort que s'il n'y a plus de lignes avec des acteurs
-
- if Length(Value)> 0 then
- // si on a trouvΘ des acteurs
- begin
- Value := copy(Value, 3, Length(Value)-2); // Retire le premier ', '
- Value := StringReplace(Value, '%20', ' '); // supprime les '%20'
- if ImportAddImport then
- begin
- GetField(fieldActors, Dummy);
- Value := Dummy + Value;
- SetField(fieldActors, Value);
- end
- else
- SetField(fieldActors, Value);
- end;
- end;
-
- // RΘalisateur
- if ImportRealisateur then
- begin
- LineNr := FindLine('field-director=', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('field-director=', Line)+15;
- line := copy(line,beginpos, length(line) - beginpos);
- EndPos := pos('/', Line);
- Value := copy(Line, 1, EndPos-1);
- Value := StringReplace(Value, '%20', ' ');
- if ImportAddImport then
- begin
- GetField(fieldDirector, Dummy);
- Value := Dummy + Value;
- SetField(fieldDirector, Value);
- end
- else
- SetField(fieldDirector, Value);
- end;
- end;
-
- // Producteur
- if ImportProducteur then
- begin
- LineNr := FindLine('diteur :', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('diteur :', Line)+14;
- line := copy(line,beginpos, length(line) - beginpos);
- EndPos := pos('<br>', Line);
- Value := copy(Line, 1, EndPos-1);
- if ImportAddImport then
- begin
- GetField(fieldProducer, Dummy);
- Value := Dummy + Value;
- SetField(fieldProducer, Value);
- end
- else
- SetField(fieldProducer, Value);
- end;
- end;
-
- // Image
- if ImportImage then
- begin
- LineNr := FindLine('<a href="http://images-eu.amazon.com/images/P/', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('src="', Line) + 4;
- Delete(Line, 1, BeginPos);
- EndPos := pos('"', Line);
- Value := copy(Line, 1, EndPos - 1);
- if ImportGrandeImage then
- Value := StringReplace(Value, 'MZZZZZZZ', 'LZZZZZZZ'); // Change l'URL pour prendre la grande au lieu de la petite image
- Sleep(TempsPause*3); // Attente 2X seconde : Evite les timeout sur le serveur
- GetPicture(Value, False); // False = stocke l'image dans la base
- end;
- end;
-
- // Titre Original
- if ImportTitreOriginal then
- begin
- LineNr := FindLine('Titre Original : ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('Titre Original : ', Line)+27;
- EndPos := pos('<br>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- SetField(fieldOriginalTitle, Value);
- end;
- end;
-
- // Titre Traduit
- if ImportTitreTraduit then
- begin
- LineNr := FindLine('Amazon.fr : DVD: ', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('Amazon.fr : DVD: ', Line)+22;
- EndPos := pos('</title>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- SetField(fieldTranslatedTitle, Value);
- end;
- end;
-
- // Bonus
- if ImportBonus then
- begin
- LineNr := FindLine('<br><b>Bonus :</b><br>', Page, 0);
- if LineNr > -1 then
- begin
- LineNr := LineNr + 1;
- Line := Page.GetString(LineNr);
- EndPos := Pos('<BR>', Line);
- if EndPos > 0 then
- Delete(Line, EndPos, Length(Line));
- Value := 'Bonus :' + #13#10 + StringReplace(StringReplace(Line, '<br>', #13#10), '', '-');
- HTMLDecode(Value);
- SetField(fieldComments, Value);
- end;
- end;
-
- // Description, synopsis du film
- if ImportSynopsis then
- begin
- LineNr := FindLine('Synopsis', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr+1); // prend la ligne suivante car synopsis est seule sur sa ligne
- // BeginPos := Pos('Synopsis', Line);
- // Line := copy(Line, BeginPos, Length(Line)- BeginPos); // ne garde que la fin
- BeginPos := Pos('<span class="serif">', Line)+20;
- EndPos := Pos('</span>', Line);
- Value := copy (Line,BeginPos,EndPos-BeginPos);
- Value := StringReplace(StringReplace(Value, '<br>', #13#10), '', '-');
- HTMLDecode(Value);
- SetField(fieldDescription, Value);
- end;
- end;
-
- DisplayResults;
- end;
-
- procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
- var
- Line: string;
- MovieTitle, MovieAddress: string;
- StartPos: Integer;
- StartImg: Integer;
- StartLst: Integer;
- LastLine: Integer;
-
- begin
- repeat
- LineNr := LineNr + 1;
- Line := Page.GetString(LineNr);
- LastLine := Page.count;
- StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
- StartImg := pos('<img src="http://images-eu.amazon.com/images/', Line);
- StartLst := pos('</a>', Line);
- if StartPos+StartImg+StartLst < StartPos+StartPos+StartPos-StartImg-StartLst then
- begin
- Startpos := Startpos + 9;
- MovieAddress := copy(Line, StartPos, pos('qid', Line) - StartPos);
- StartPos := pos('<b>', Line) + 3;
- MovieTitle := copy(Line, StartPos, (StartPos + 150)- StartPos);
- HTMLDecode(Movietitle);
- PickTreeAdd(MovieTitle, 'http://www.amazon.fr/' + MovieAddress);
- end;
- until (LineNr > Lastline);
- end;
-
- begin
- if CheckVersion(3,4,0) then
- begin
- MovieName := GetField(fieldTranslatedTitle);
- if MovieName = '' then
- MovieName := GetField(fieldOriginalTitle);
-
- if ConfirmTitre then
- begin
- if Input('Amazon.fr Import', 'Entrer le titre du film :', MovieName) then
- begin
- AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-title='+UrlEncode(MovieName));
- end;
- end else
- begin
- AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-title='+UrlEncode(MovieName));
- end;
- end else
- ShowMessage('Ce script requiert une version plus rΘcente de Ant Movie Catalog (au moins la version 3.4.0)');
- end.
-